package br.com.gpetec.mom.domain.solr.documents;

import java.util.Date;
import java.util.List;

import org.apache.solr.common.SolrDocument;

public class Documento {

	private String autor;
	private String entidade;
	private Date data;
	private String texto;
	private String tipo;
	private String solrId;
	private Boolean automatico;
	private String orientacao;

	public Documento(SolrDocument documento) {
		setSolrId((String) documento.getFieldValue("id"));
		setAutomatico(!documento.containsKey("classificacoesManuais"));
		if (documento.containsKey("autor")) {
			setAutor((String) documento.getFieldValue("autor"));
		} else if (documento.containsKey("domain")) {
			setAutor((String) documento.getFieldValue("domain"));
		}
		setTipo((String) documento.getFieldValue("tipo"));
		setData((Date) documento.getFieldValue("tstamp"));
		setTexto((String) documento.getFieldValue("filteredContent"));
		setOrientacao((String) documento.getFieldValue("orientacao"));
	}

	@SuppressWarnings("unchecked")
	public Documento(SolrDocument documento, String nome) {
		setSolrId((String) documento.getFieldValue("id"));
		setAutomatico(!documento.containsKey("classificacoesManuais"));
		setEntidade(nome.toLowerCase());
		setTipo((String) documento.getFieldValue("tipo"));
		if (documento.containsKey("autor")) {
			setAutor((String) documento.getFieldValue("autor"));
		} else if (documento.containsKey("domain")) {
			setAutor((String) documento.getFieldValue("domain"));
		}
		setData((Date) documento.getFieldValue("tstamp"));
		setTexto((String) documento.getFieldValue("filteredContent"));
		setOrientacao((String) documento.getFieldValue("orientacao"));

//		if (getAutomatico()) {
//			List<String> orientacoes = (List<String>) documento
//					.getFieldValue("ParMencionadoOrientacaoLM");
//			for (String orientacao : orientacoes) {
//				if (orientacao.startsWith(nome.toLowerCase())) {
//					setOrientacao(orientacao.split(":")[1]);
//				}
//			}
//		} else {
//			List<String> orientacoes = (List<String>) documento
//					.getFieldValue("classificacoesManuais");
//			for (String orientacao : orientacoes) {
//				if (orientacao.startsWith(nome.toLowerCase())) {
//					setOrientacao(orientacao.split(":")[1]);
//				}
//			}
//		}
	}

	public Documento(SolrDocument documento, String nome, String orientacao) {
		this(documento, nome);
		setOrientacao(orientacao);
	}

	public String getAutor() {
		return autor;
	}

	public void setAutor(String autor) {
		this.autor = autor;
	}

	public String getTexto() {
		return texto;
	}

	public void setTexto(String texto) {
		this.texto = texto;
	}

	public String getOrientacao() {
		return orientacao;
	}

	public void setOrientacao(String orientacao) {
		this.orientacao = orientacao;
	}

	public String getEntidade() {
		return entidade;
	}

	public void setEntidade(String entidade) {
		this.entidade = entidade;
	}

	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public Boolean getAutomatico() {
		return automatico;
	}

	public void setAutomatico(Boolean automatico) {
		this.automatico = automatico;
	}

	public String getSolrId() {
		return solrId;
	}

	public void setSolrId(String solrId) {
		this.solrId = solrId;
	}

	@Override
	public boolean equals(Object obj) {
		Documento doc = (Documento) obj;
		return getSolrId().equals(doc.getSolrId());
	}

	@Override
	public int hashCode() {
		return getSolrId().hashCode();
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

}
